<?php
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
*/

/**
 * Description of RevisorDAO
 *
 * @author cshepherd
 */
class RevisorDAO extends DAO {

    public function select($fields='*', $condition='TRUE', $page='1', $rows_per_page='20', $order_by='nombre', $order_by_type='DESC') {
        $list_revisor = array();
        $data_revisor = array();
        try {
            $rows = 0;
            $start = intval(($page-1)*$rows_per_page);
            $query = "SELECT COUNT(id_revisor) AS rows FROM revisor";
            $query .= " WHERE ".$condition;
            $stmt = $this->dbh->query($query);
            $rows = $stmt->fetchObject()->rows;
            $query = 'SELECT '. $fields .' FROM revisor';
            $query .= ' WHERE '.$condition.' ';
            $pages = ceil($rows/$rows_per_page);
            $query .= 'ORDER BY '.$order_by;
            $query .= ' '.$order_by_type;
            $stmt->closeCursor();
            $query .= ' LIMIT '.$start.",".$rows_per_page;
            //echo $query;
            /*$query .= 'ORDER BY :order_by';
            $query .= ' :order_by_type ';
            $query .= 'LIMIT :start, :rows_per_page';*/
            $stmt->closeCursor();
            $stmt = $this->dbh->prepare($query);
            /*$stmt->bindParam(':start', $start, PDO::PARAM_INT);
            $stmt->bindParam(':rows_per_page', $rows_per_page, PDO::PARAM_INT);
            $stmt->bindParam(':order_by', $order_by);
            $stmt->bindParam(':order_by_type', $order_by_type);*/
            $stmt->setFetchMode(PDO::FETCH_OBJ);
            $stmt->execute();
            $result = $stmt->fetchAll();
            foreach($result as $row) {
                $objRevisorTO = new RevisorTO;
                $objRevisorTO->setIdRevisor($row->id_revisor);
                $objRevisorTO->setNombre($row->nombre);
                $objRevisorTO->setApellido($row->apellido);
                $objRevisorTO->setEmail1($row->email_1);
                $objRevisorTO->setEmail2($row->email_2);
                $objRevisorTO->setInstitucion($row->institucion);
                $objRevisorTO->setTelefono($row->telefono);
                $objRevisorTO->setCargo($row->cargo);
                $objRevisorTO->setCV($row->cv);
                $objRevisorTO->setIdPais($row->id_pais);
                $objRevisorTO->setIdCuenta($row->id_cuenta);
                $objRevisorTO->setIdTrack($row->id_track);
                $list_revisor[count($list_revisor)+1] = $objRevisorTO;
            }
            $data_revisor['list_revisor']=$list_revisor;
            $data_revisor['pages']=$pages;
            $data_revisor['rows']=$rows;
            return $data_revisor;

        }catch(Exception $e) {
            throw $e;
        }
    }

    public function load($objRevisorTO) {
        try {
            $query = 'SELECT * FROM revisor WHERE id_cuenta = :id_cuenta LIMIT 1';
            $stmt = $this->dbh->prepare($query);
            $stmt->bindParam(':id_cuenta', $objRevisorTO->getIdCuenta());
            $stmt->setFetchMode(PDO::FETCH_OBJ);
            $stmt->execute();
            $resultado = $stmt->fetch();
            $objRevisorTO = new RevisorTO();
            $objRevisorTO->setIdRevisor($resultado->id_revisor);
            $objRevisorTO->setNombre($resultado->nombre);
            $objRevisorTO->setApellido($resultado->apellido);
            $objRevisorTO->setEmail1($resultado->email_1);
            $objRevisorTO->setEmail2($resultado->email_2);
            $objRevisorTO->setInstitucion($resultado->institucion);
            $objRevisorTO->setCargo($resultado->cargo);
            $objRevisorTO->setCV($resultado->cv);
            $objRevisorTO->setIdPais($resultado->id_pais);
            $objRevisorTO->setIdCuenta($resultado->id_cuenta);
            $objRevisorTO->setIdTrack($resultado->id_track);
            return $objRevisorTO;

        }
        catch(Exception $e) {
            throw $e;
        }
    }

    public function loadRevisorById($objRevisorTO) {
        try {
            $query = 'SELECT * FROM revisor WHERE id_revisor = :id_revisor LIMIT 1';
            $stmt = $this->dbh->prepare($query);
            $stmt->bindParam(':id_revisor', $objRevisorTO->getIdRevisor());
            $stmt->setFetchMode(PDO::FETCH_OBJ);
            $stmt->execute();
            $resultado = $stmt->fetch();
            $objRevisorTO = new RevisorTO();
            $objRevisorTO->setIdRevisor($resultado->id_revisor);
            $objRevisorTO->setNombre($resultado->nombre);
            $objRevisorTO->setApellido($resultado->apellido);
            $objRevisorTO->setEmail1($resultado->email_1);
            $objRevisorTO->setEmail2($resultado->email_2);
            $objRevisorTO->setInstitucion($resultado->institucion);
            $objRevisorTO->setCargo($resultado->cargo);
            $objRevisorTO->setCV($resultado->cv);
            $objRevisorTO->setIdPais($resultado->id_pais);
            $objRevisorTO->setIdCuenta($resultado->id_cuenta);
            $objRevisorTO->setIdTrack($resultado->id_track);
            return $objRevisorTO;

        }
        catch(Exception $e) {
            throw $e;
        }
    }

    public function delete($id) {
        try {
            $query = "DELETE FROM revisor WHERE id_revisor = :id_revisor";
            $stmt = $this->dbh->prepare($query);
            $stmt->bindParam(':id_revisor',$id);
            $stmt->execute();
            return "";
        }catch (Exception $e) {
            throw $e;
        }
    }

    protected function update($objetoTO) {
        try {
            $query = "UPDATE revisor SET nombre = :nombre, apellido = :apellido,
            email_1 = :email_1, email_2=:email_2,institucion = :institucion,
            cargo = :cargo , id_pais=:id_pais, id_track = :id_track
            WHERE id_revisor = :id";
            $stmt = $this->dbh->prepare($query);
            $stmt->bindParam(':id',$objetoTO->getIdRevisor());
            $stmt->bindParam(':nombre',$objetoTO->getNombre());
            $stmt->bindParam(':apellido',$objetoTO->getApellido());
            $stmt->bindParam(':email_1',$objetoTO->getEmail1());
            $stmt->bindParam(':email_2',$objetoTO->getEmail2());
            $stmt->bindParam(':institucion',$objetoTO->getInstitucion());
            $stmt->bindParam(':cargo',$objetoTO->getCargo());
            $stmt->bindParam(':id_pais',$objetoTO->getIdPais());
            $stmt->bindParam(':id_track',$objetoTO->getIdTrack());
            $stmt->execute();
            return "";
        }catch (Exception $e) {
            throw $e;
        }
    }

    protected function insert($Entidad) {
        require 'conf/conexion.php';
        $nombre = $Entidad->getNombre();
        $apellido = $Entidad->getApellido();
        $email_1 = $Entidad->getEmail1();
        $email_2 = $Entidad->getEmail2();
        $institucion = $Entidad->getInstitucion();
        $cargo = $Entidad->getCargo();
        $id_pais = $Entidad->getIdPais();
        $id_cuenta = $Entidad->getIdCuenta();
        $id_track = $Entidad->getIdTrack();

        $consulta = $db->prepare("INSERT INTO revisor (nombre, apellido, email_1, email_2, institucion, cargo,
            cv, id_pais, id_cuenta, id_track) VALUES ('$nombre','$apellido','$email_1','$email_2','$institucion',
            '$cargo','', '$id_pais','$id_cuenta','$id_track')");

        $consulta->execute();
    }

    protected function updateCV($objetoTO) {
        try {
            $query = "UPDATE revisor SET cv = :cv
            WHERE id_revisor = :id";
            $stmt = $this->dbh->prepare($query);
            $stmt->bindParam(':id',$objetoTO->getIdRevisor());
            $stmt->bindParam(':cv',$objetoTO->getCV());
            $stmt->execute();
            return "";
        }catch (Exception $e) {
            throw $e;
        }
    }
}
?>